package com.flower.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.flower.domain.ApiResult;
import com.flower.domain.entity.product.Product;
import com.flower.domain.entity.product.ProductQueryParam;
import com.flower.service.ProductService;
import lombok.extern.log4j.Log4j2;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.LinkedHashMap;
import java.util.Map;

@RestController
@Log4j2
@RequestMapping("/product")
public class BackageProductController {

    @Resource
    private ProductService productService;

    /**
     * 查询商品数据
     * @param currentPage 当前页
     * @param size 当前页的条数
     * @param param 查询参数
     * @return
     */
    @PostMapping("/list")
    public ApiResult<Map<String,Object>> Products(
            @RequestParam(defaultValue = "1") int currentPage,
            @RequestParam(defaultValue = "10") int size,
            @RequestBody ProductQueryParam param){
        //构建分页查询器
        Page<Product> page = new Page<>(currentPage,size);
        //构建条件查询
        LambdaQueryWrapper<Product> wrapper = new LambdaQueryWrapper<>();
        //是否热卖
        if(!StringUtils.isBlank(param.getIsHot())){
            wrapper.eq(Product::getIsHot,Integer.valueOf(param.getIsHot()));
        }
        //是否上架
        if(!StringUtils.isBlank(param.getIsStatus())){
            wrapper.eq(Product::getStatus,Integer.valueOf(param.getIsStatus()));
        }
        //是否新品
        if(!StringUtils.isBlank(param.getIsNew())){
            wrapper.eq(Product::getIsNew,Integer.valueOf(param.getIsNew()));
        }

        //商品关键字
        wrapper.like(!StringUtils.isBlank(param.getKeyWord()),Product::getKeyWord,param.getKeyWord()+"%")
                .or().like(!StringUtils.isBlank(param.getKeyWord()),Product::getName,"%"+param.getKeyWord()+"%");
        //创建时间
        wrapper.eq(!StringUtils.isBlank(param.getDate()),Product::getCreateTime,param.getDate()+"%");
        //按创建时间进行升序排序
        wrapper.orderByAsc(Product::getCreateTime);
        Page<Product> productPage = productService.page(page, wrapper);
        Map<String,Object> map = new LinkedHashMap<>(2);
        map.put("content",productPage.getRecords());
        map.put("total",productPage.getTotal());
        return ApiResult.ok(map);
    }

    /**
     * 后台商品数据删除
     * @param id 商品编号
     * @return
     */
    @GetMapping("/delete/{id}")
    public ApiResult<Boolean> deleteProduct(@PathVariable Long id){
        //正常来说后端也要验证 商品是否已下架
        productService.removeById(id);
        return ApiResult.ok();
    }

    /**
     * 后台添加或修改一个商品数据
     * @param product 商品
     * @return
     */
    @PostMapping("/UandA")
    public ApiResult<Boolean> updateAndAddProduct(@RequestBody Product product){
        if(StringUtils.isNotBlank(product.getId().toString())){
            //构建修改条件构造器
            log.warn("修改");
            productService.updateById(product);
        }else {
            log.warn("增加");

            productService.save(product);
        }
        return ApiResult.ok();
    }
}
